在第四天的核心概念有介紹到張量,Tensorflow 的計算結果不是具體的數字,而是一個張量的結構。
張量會有三個屬性:
先從一維最簡單的語法開始示範:
import tensorflow as tf
x = tf.constant(4)
y = tf.constant(5)
z = tf.add(x,y)
m = tf.multiply(x,y)
print(z)
print("m:", m.numpy())
它的輸出結果:
tf.Tensor(9, shape=(), dtype=int32)
m: 20
這邊示範兩種輸出寫法,可以使用.numpy() 的方法將 TensorFlow 張量轉換為 NumPy 數組,就只會顯示數值。
如果直接使用 print(參數),會看到張量的描述信息,包含名稱、維度和類型,而不是具體值。
還有其他數值運算,如下:
tf.subtract(x,y) 減法
tf.divide(x,y) 除法
tf.mod(x,y) 餘數
tf.sqrt(x) 平方
tf.abs(x) 絕對值
二維也是相同概念:
import tensorflow as tf
x = tf.constant([[1,2,3], [4,5,6]])
y = tf.constant([[7,8,9], [10,11,12]])
z = tf.add(x,y)
m = tf.multiply(x,y)
print(z)
print("m:", m.numpy())
其輸出結果為:
tf.Tensor(
[[ 8 10 12]
[14 16 18]], shape=(2, 3), dtype=int32)
m: [[ 7 16 27]
[40 55 72]]
最後想介紹一些比較進階的運算操作(operations):
x = tf.eye(3)
會輸出:
tf.Tensor(
[[1. 0. 0.]
[0. 1. 0.]
[0. 0. 1.]], shape=(3, 3), dtype=float32)
tf.eye(行數),它用於創建一個單位矩陣(identity matrix)。
x = tf.random.normal((3,3), mean=0, stddev=1)
會輸出:
tf.Tensor(
[[ 0.7353721 -0.6438684 -2.337073 ]
[ 0.41706735 1.0954909 1.4115753 ]
[-0.4909441 0.97721106 0.65189064]], shape=(3, 3), dtype=float32)
tf.random.normal (shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None) 用於生成高斯分佈的隨機數據,在隨機初始化模型權重或生成隨機樣本時很有用。mean 是生成數據的均值(默認為0),stddev是生成數據的標準差(默認為1)。
類似概念的 tf.random.uniform (shape, minval=0, maxval=None, dtype=tf.float32, seed=None)是用於生成在指定範圍內均勻分佈的隨機數據,minval 是生成的隨機數的最小值(默認為0),maxval 是生成的隨機數的最大值(默認不設上限)。
x = tf.range(start=1, limit=10, delta=2)
會輸出:
tf.Tensor([1 3 5 7 9], shape=(5,), dtype=int32)
tf.range(start=0, limit=None, delta=1, dtype=None) 用於生成一個一維張量,在生成一系列數值的情況下非常有用,例如索引和計算。delta 是序列中相鄰數字之間的等差(默認1)。